<?php

    class cache_control_class
    {

        private $cacheEnable = false;

        public function __construct()
        {
            $this->cacheEnable = isset($_SESSION);
            $dir1 = constant('CURRENTSITE_DIR').'/temp/';
            $dir2 = constant('CURRENTSITE_DIR').'/temp/cache/';
            if(!file_exists($dir1)){mkdir($dir1);}
            if(!file_exists($dir2)){mkdir($dir2);}
        }
        
        public function ClearTimedFunctionContent($name)
        {
            $filename = constant('CURRENTSITE_DIR').'/temp/cache/'.$name.'.tmp';
            if(file_exists($filename))
            {
                unlink($filename);
            }
        }

        /**
        * Захват вывода функции с сохранением вывода на определенное время с целью уменьшения кол-ва ее вызовов
        * 
        * @param mixed $name Уникальное имя
        * @param mixed $function Имя функции, захват которой необходимо выполнить
        */
        public function TimedFunctionContent($name, $function, $timeout = 300, $parameters = Array(), $object = null)
        {
            $need_make = true;
            $filename = constant('CURRENTSITE_DIR').'/temp/cache/'.$name.'.tmp';
            if(file_exists($filename))
            {
                // текущее время 
                $time_sec = time(); 
                // время изменения файла 
                $time_file = filemtime($filename); 
                // тепрь узнаем сколько прошло времени (в секундах) 
                $time = $time_sec-$time_file;
                if($time < 0)
                {
                    $time *= -1;
                }
                if($time < $timeout)
                {
                    $need_make = false;
                }
            }
            if($need_make)
            {
                $value = CatchFunction($function, $parameters, $object);
                file_put_contents($filename, $value);
            }
            else
            {
               $value = file_get_contents($filename);
            }
            return $value;
        }

        function Enable()
        {
            return $this->cacheEnable;
        }

        /**
        * Get data from cache by id
        * 
        * @param mixed $id Data identificator
        * @return mixed Data for defined id
        */
        function getCache($id)
        {
            if(!$this->cacheEnable){return null;}
            if(isset($_SESSION[$id]))
            {
                return $_SESSION[$id];
            }
            return null;
        }

        function setCache($id, $data)
        {
            if(!$this->cacheEnable){return false;}
            $_SESSION[$id] = $data;
            return true;
        }

    }   
        
?>